<template>
  <el-form ref="ruleFormRef" :model="formData" :rules="formRules" size="small" :inline="false" label-width="100px">
      <el-form-item label="主题" prop="title">
        <el-input v-model="formData.title" placeholder="请输入主题" maxlength="32" size="small"/>
      </el-form-item>
      <el-form-item label="候选人" prop="candidateId">
        <el-select v-model="formData.candidateId" placeholder="请选择候选人" @change="getLastInterview" size="small" filterable>
          <el-option v-for="item in candidateList" :key="item.id" :label="item.name" :value="item.id"/>
        </el-select>
      </el-form-item>
      <el-form-item label="面试时间">
        <span>{{ formData.actionStartTime }} - {{ formData.actionEndTime }}</span>
      </el-form-item>
      <el-form-item label="面试官">
        <span>{{ formData.interviewerNames }}</span>
      </el-form-item>
      <el-form-item label="面试轮次">
        <span>{{ formData.interviewRound }}轮</span>
      </el-form-item>
      <el-form-item label="优先度">
        <el-radio-group v-model="formData.priority">
          <el-radio :label="0" size="small">普通</el-radio>
          <el-radio :label="1" size="small">高</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="通知时间" prop="remindState">
        <el-radio-group v-model="formData.remindState">
          <el-radio v-for="item in remindTimes" :key="item.value" :label="item.value" size="small">{{ item.label }}</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="通知方式" prop="remindType">
        <el-checkbox-group v-model="formData.remindType" size="small">
          <el-checkbox label="1">应用、公众号通知</el-checkbox>
          <el-checkbox label="2">短信通知</el-checkbox>
        </el-checkbox-group>
      </el-form-item>
      <el-form-item label="备注信息">
        <el-input v-model="formData.remark" type="textarea" :rows="3" placeholder="请输入备注信息" size="small"/>
      </el-form-item>
    </el-form>
</template>

<script>
// 面试评价 OA_INTERVIEW_EVALUATE
import {onMounted, reactive, toRefs, ref, watch, nextTick} from 'vue'
import {getListByType, getLastInterviewData} from '/@/api/oa/candidate'
import {getRemindTimes} from '/@/api/matter'
import {ElMessage} from 'element-plus';
import {formatDate} from '/@/utils/formatTime'
import {homeApi} from "/@/api/home/index";
import { useCalendarConfig } from '/@/stores/calendar';
import { storeToRefs } from 'pinia';

export default {
    name: 'AppraiseInterviewForm',
    props: {
        selectTime: {
            type: String,
            default: null
        },
        editId: {
          type: String,
          default: null
        }
    },
    setup(props, context) {
        const { editId, selectTime } = toRefs(props)
        const homeCalendar = homeApi();
        const ruleFormRef = ref({});
        const storesCalendarConfig = useCalendarConfig();
        const { eventForm } = storeToRefs(storesCalendarConfig)
        const state = reactive({
            formData: {
                candidateId: null,
                title: '面试评价',
                interviewStartTime: null,
                interviewEndTime: null,
                executorIds: '',    // 拿最新面试记录获取当时的面试官id, 逗号隔开
                interviewerNames: '',   // 面试官名称
                actionStartTime: null,  // 拿最新面试记录的面试开始时间
                actionEndTime: null,    // 拿最新面试记录的面试结束时间
                interviewRound: 1,   // 自动统计面试次数
                interviewDiscuss: '',   // 面试评价, 格式如：[{"content":"评价内容","userName":"评价人名称"}]
                remark: null,    // 备注
                remindState: 'NONE',     // 提醒时间, 根据枚举类MatterRemindTimeEnum
                remindType: [],     // 提醒方式, 多选
                state: 1,           // 状态 -1草稿 0未开始 1进行中 2已完成 3已退回  4已取消 5已撤回
                priority: 0        // 优先级 0普通 1重要
            },
            candidateList: [],
            remindTimes: [],
            originForm: {}
        })
        const formRules = reactive({
            candidateId: {required: true, message: '请选择候选人', trigger: 'change'},
            title: {required: true, message: '请填写主题', trigger: 'change'}
        })
        let close = () => {
            context.emit("PingJiaCloseClose");
            reset()
        };
        let submit = () => {
            if (!ruleFormRef) return;
            return new Promise(async (resolve, reject) => {
                await ruleFormRef.value.validate((valid, fields) => {
                    if (valid) {
                      let str = state.formData.remindType.join(',')
                      state.formData.remindType = str
                      if(editId.value) {
                        // 编辑
                        for(let key in state.formData){
                          if(state.originForm.hasOwnProperty(key)){
                            state.originForm[key] = state.formData[key]
                          }
                          if(state.originForm.info.hasOwnProperty(key)){
                            state.originForm.info[key] = state.formData[key]
                          }
                        }
                        storesCalendarConfig.setEventForm(state.originForm)
                        reset()
                        close()
                        resolve('edit') 
                      }else{
                        homeCalendar.addInterviewEvaluate(state.formData).then((res) => {
                          if (res.code === 0) {
                            reset()
                            close()
                            resolve()
                          }else{
                            reject()
                          }
                        });
                      }
                        
                    } else {
                        reject()
                        console.log("error submit!", fields);
                    }
                });
            })
            
        };
        const reset = () => {
            if (!ruleFormRef) return
            ruleFormRef.value.resetFields()
        }
        const getLastInterview = () => {
            // 如果候选人为空, 结束加载面试记录数据
            console.log(state.formData.candidateId)
            if (!state.formData.candidateId) {
                return false
            }
            getLastInterviewData(state.formData.candidateId).then(res => {
                if (res.data) {
                    state.formData.executorIds = res.data.interviewers.split(',')
                    state.formData.interviewerNames = res.data.interviewerNames
                    state.formData.interviewStartTime = res.data.interviewTimeStart
                    state.formData.interviewEndTime = res.data.interviewTimeEnd
                    state.formData.interviewRound = res.data.interviewRound
                } else {
                    ElMessage.error('未查询到该候选人的面试记录！')
                }
            })
        }
        watch(() => eventForm.value,
          val => {
            if(editId.value && val) {
              // 编辑
              nextTick(() => {
                const data = val
                if(!data) return
                state.originForm = data
                for(let params in data.info){
                  // 拿出info里面的数据
                  if(state.formData.hasOwnProperty(params)) {
                    state.formData[params] = data.info[params]
                  }
                }
                for(let key in data) {
                  // 列表里面的数据
                  if(state.formData.hasOwnProperty(key)) {
                    state.formData[key]= data[key]
                  }
                }
                if(data.remindType){
                  state.formData.remindType = data.remindType.split(',')
                }
                if(data.info.candidateId) {
                  getLastInterview()
                }
              })
            }
          }        
        )
        onMounted(() => {
            state.formData.actionStartTime = state.formData.actionEndTime = formatDate(new Date(), 'YYYY-mm-dd HH:MM:SS')
            getLastInterview()
            getRemindTimes().then(res => state.remindTimes = res.data)
            // 获取已面试的
            getListByType('3').then(res => state.candidateList = res.data)
        })
        return {
            ...toRefs(state),
            getLastInterview,
            submit,
            close,
            formRules,
            ruleFormRef,
            reset,
        }
    }
}
</script>

<style>

</style>